package farmaciaweb.com.br.entity;

import java.io.Serializable;
import java.lang.String;
import farmaciaweb.com.br.util.*;
import java.util.Collection;
import javax.persistence.*;

import static javax.persistence.GenerationType.SEQUENCE;

/**
 * Entity implementation class for Entity: Medicamento
 *
 */
@Entity
//@Inheritance (strategy = InheritanceType.SINGLE_TABLE)
//@DiscriminatorColumn(name="tpMedicamento", discriminatorType=DiscriminatorType.CHAR)
@NamedQueries(value = {
		@NamedQuery(name = "bd_farmaciaweb.consultaMedicamento", query = "SELECT e FROM Medicamento e " +
																"where (e.nome like :nome) " )})

public class Medicamento implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 5167836168898796786L;

	@Id
	@Column(name = "idMedicamento")
	@GeneratedValue(strategy = SEQUENCE, generator = "med_gen")
	@SequenceGenerator(name = "med_gen", sequenceName = "med_seq", allocationSize = 5)
	private int idMedicamento;
	
	@Column(nullable = false)
	private int PtoRessuprimento;
	
	@Enumerated(EnumType.ORDINAL)
	private TipoMedicamento tipo;
	
	@Column(nullable = false)
	private float precoVenda;
	
	@Column(nullable = false, length = 50)
	private String nome;
	
	@Enumerated(EnumType.ORDINAL)
	private SituacaoMedicamento situacao;
	
	@Embedded
	private Dosagem dosagem;
	
	@Embedded
	private Embalagem embalagem;
	
	@Embedded
	private CondicaoRefrigeracao condicaoRefrigeracao;
	
	@ManyToOne
	@JoinColumn(name = "id_indic")
	private Indicacao indicacao;
	
	@ManyToOne
	@JoinColumn(name = "id_subst")
	private Substancia substancia;
	
	@OneToMany(mappedBy = "medicamento")
	private Collection<Lote> lote;
	
	//@OneToMany(mappedBy = "medicamento")
	//private Collection<ItemReceita> itemReceita;
	
	//@OneToMany(mappedBy = "medicamento")
	//private Collection<ItemPedido> itemPedido;
	
	@ManyToOne
	@JoinColumn(name = "id_lab")
	private Laboratorio laboratorio;
	
	//@OneToMany(mappedBy = "medicamento")
	//private Collection<Preco> genericosMed;

	public Medicamento() {
		super();
	}   
	public SituacaoMedicamento getSituacao() {
		return situacao;
	}
	public void setSituacao(SituacaoMedicamento situacao) {
		this.situacao = situacao;
	}
	public int getIdMedicamento() {
		return this.idMedicamento;
	}

	public void setIdMedicamento(int idMedicamento) {
		this.idMedicamento = idMedicamento;
	}   
	public int getPtoRessuprimento() {
		return this.PtoRessuprimento;
	}

	public void setPtoRessuprimento(int PtoRessuprimento) {
		this.PtoRessuprimento = PtoRessuprimento;
	}   
	public float getPrecoVenda() {
		return this.precoVenda;
	}

	public void setPrecoVenda(float precoVenda) {
		this.precoVenda = precoVenda;
	}   
	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public TipoMedicamento getTipo() {
		return tipo;
	}
	public void setTipo(TipoMedicamento tipo) {
		this.tipo = tipo;
	}
	public Dosagem getDosagem() {
		return dosagem;
	}
	public void setDosagem(Dosagem dosagem) {
		this.dosagem = dosagem;
	}
	public Embalagem getEmbalagem() {
		return embalagem;
	}
	public void setEmbalagem(Embalagem embalagem) {
		this.embalagem = embalagem;
	}
	public CondicaoRefrigeracao getCondicaoRefrigeracao() {
		return condicaoRefrigeracao;
	}
	public void setCondicaoRefrigeracao(CondicaoRefrigeracao condicaoRefrigeracao) {
		this.condicaoRefrigeracao = condicaoRefrigeracao;
	}
	public Indicacao getIndicacao() {
		return indicacao;
	}
	public void setIndicacao(Indicacao indicacao) {
		this.indicacao = indicacao;
	}
	public Substancia getSubstancia() {
		return substancia;
	}
	public void setSubstancia(Substancia substancia) {
		this.substancia = substancia;
	}
	public Collection<Lote> getLote() {
		return lote;
	}
	public void setLote(Collection<Lote> lote) {
		this.lote = lote;
	}
	public Laboratorio getLaboratorio() {
		return laboratorio;
	}
	public void setLaboratorio(Laboratorio laboratorio) {
		this.laboratorio = laboratorio;
	}
	public static long getSerialversionuid() {
		return serialVersionUID;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + idMedicamento;
		result = prime * result
				+ ((indicacao == null) ? 0 : indicacao.hashCode());
		result = prime * result
				+ ((laboratorio == null) ? 0 : laboratorio.hashCode());
		result = prime * result
				+ ((substancia == null) ? 0 : substancia.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Medicamento other = (Medicamento) obj;
		if (idMedicamento != other.idMedicamento)
			return false;
		if (indicacao == null) {
			if (other.indicacao != null)
				return false;
		} else if (!indicacao.equals(other.indicacao))
			return false;
		if (laboratorio == null) {
			if (other.laboratorio != null)
				return false;
		} else if (!laboratorio.equals(other.laboratorio))
			return false;
		if (substancia == null) {
			if (other.substancia != null)
				return false;
		} else if (!substancia.equals(other.substancia))
			return false;
		return true;
	}
	   
}
